﻿//_____________________________________________________________________________
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
//   Klasse: Tinare.Decrypter	Projekt: Tinare
//_____________________________________________________________________________
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
//   Beschreibung:
//        Die Decrypter entschlüsselt die Datei
//
//—————————————————————————————————————————————————————————————————————————————
//   © Minerva Group
//—————————————————————————————————————————————————————————————————————————————
//   Datum       Name            Tätigkeit
//   21.02.2009  broox           Erstellt
//
//
//—————————————————————————————————————————————————————————————————————————————
//_____________________________________________________________________________
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

using System;

namespace Tinare
{
    public class Decrypter : Encrypter
    {
        public Decrypter(string Password, Byte[] value) : base(Turn(GetSwitchValues(SHA1Hash(Password))), value) { }

        /// <summary>
        /// Schneidet die letzten Einträge im Array ab
        /// </summary>
        private Byte[] CutByteArray(Byte[] value, Int32 length)
        {
            Int32 size = value.Length - length;
            Byte[] temp = new Byte[size];

            for (Int32 i = 0; i < size; i++)
            {
                temp[i] = value[i];
            }

            return temp;
        }
        /// <summary>
        /// Dreht ein Array um
        /// </summary>
        private static Int32[] Turn(Int32[] value)
        {
            Int32[] temp = new Int32[value.Length];
            Int32 c = 0;

            for (Int32 i = (value.Length - 1); i > -1; i--)
            {
                temp[i] = value[c];
                c++;
            }

            return temp;
        }

        /// <summary>
        /// Fügt den Daten leere Bytes hinzu und ein Zeiger-Byte hinzu
        /// </summary>
        protected override Byte[] SetBytetoFive(Byte[] value)
        {
            return value;
        }

        /// <summary>
        /// Startet die Decryption
        /// </summary>
        public override Byte[] Start()
        {
            data = Verschiebechiffre((switchindex[0] * (-1)), data);
            Byte[] ret = Crypting(data, switchindex);
            return CutByteArray(ret, Convert.ToInt32(ret[ret.Length - 1]) + 1);
        }
    }
}
